package com.yeskery.nut.extend.mcp.core.schema;

import java.util.List;
import java.util.Map;

/**
 * 提示词规范
 * @author sprout
 * 2025-04-30 14:54
 */
public abstract class PromptSchema {

    /**
     * 提示词
     */
    public static class Prompt {
        /** 名称 */
        private String name;
        /** 描述 */
        private String description;
        /** 参数 */
        private List<PromptArgument> arguments;

        /**
         * 获取名称
         * @return 提示名称
         */
        public String getName() {
            return name;
        }

        /**
         * 设置名称
         * @param name 提示名称
         */
        public void setName(String name) {
            this.name = name;
        }

        /**
         * 获取描述
         * @return 描述
         */
        public String getDescription() {
            return description;
        }

        /**
         * 设置描述
         * @param description 描述
         */
        public void setDescription(String description) {
            this.description = description;
        }

        /**
         * 获取参数
         * @return 参数
         */
        public List<PromptArgument> getArguments() {
            return arguments;
        }

        /**
         * 设置参数
         * @param arguments 参数
         */
        public void setArguments(List<PromptArgument> arguments) {
            this.arguments = arguments;
        }
    }

    /**
     * 提示参数
     */
    public static class PromptArgument {
        /** 名称 */
        private String name;
        /** 描述 */
        private String description;
        /** 是否必填 */
        private Boolean required;

        /**
         * 获取名称
         * @return 名称
         */
        public String getName() {
            return name;
        }

        /**
         * 设置名称
         * @param name 名称
         */
        public void setName(String name) {
            this.name = name;
        }

        /**
         * 获取描述
         * @return 描述
         */
        public String getDescription() {
            return description;
        }

        /**
         * 设置描述
         * @param description 描述
         */
        public void setDescription(String description) {
            this.description = description;
        }

        /**
         * 获取是否必填
         * @return 是否必填
         */
        public Boolean getRequired() {
            return required;
        }

        /**
         * 设置是否必填
         * @param required 是否必填
         */
        public void setRequired(Boolean required) {
            this.required = required;
        }
    }

    /**
     * 提示消息
     */
    public static class PromptMessage {
        /** 角色 */
        private Role role;
        /** 内容 */
        private ContentSchema.Content content;

        /**
         * 获取角色
         * @return 角色
         */
        public Role getRole() {
            return role;
        }

        /**
         * 设置角色
         * @param role 角色
         */
        public void setRole(Role role) {
            this.role = role;
        }

        /**
         * 获取内容
         * @return 内容
         */
        public ContentSchema.Content getContent() {
            return content;
        }

        /**
         * 设置内容
         * @param content 内容
         */
        public void setContent(ContentSchema.Content content) {
            this.content = content;
        }
    }

    /**
     * 获取提示词列表结果
     */
    public static class ListPromptsResult {
        /** 提示词列表 */
        private List<Prompt> prompts;
        /** 下一页游标 */
        private String nextCursor;

        /**
         * 获取提示词列表
         * @return 提示词列表
         */
        public List<Prompt> getPrompts() {
            return prompts;
        }

        /**
         * 设置提示词列表
         * @param prompts 提示词列表
         */
        public void setPrompts(List<Prompt> prompts) {
            this.prompts = prompts;
        }

        /**
         * 获取下一页游标
         * @return 下一页游标
         */
        public String getNextCursor() {
            return nextCursor;
        }

        /**
         * 设置下一页游标
         * @param nextCursor 下一页游标
         */
        public void setNextCursor(String nextCursor) {
            this.nextCursor = nextCursor;
        }
    }

    /**
     * 获取提示词请求
     */
    public static class GetPromptRequest {
        /** 提示词名称 */
        private String name;
        /** 提示词参数 */
        private Map<String, Object> arguments;

        /**
         * 获取提示词名称
         * @return 提示词名称
         */
        public String getName() {
            return name;
        }

        /**
         * 设置提示词名称
         * @param name 提示词名称
         */
        public void setName(String name) {
            this.name = name;
        }

        /**
         * 获取提示词参数
         * @return 提示词参数
         */
        public Map<String, Object> getArguments() {
            return arguments;
        }

        /**
         * 设置提示词参数
         * @param arguments 提示词参数
         */
        public void setArguments(Map<String, Object> arguments) {
            this.arguments = arguments;
        }
    }

    /**
     * 获取提示词结果
     */
    public static class GetPromptResult {
        /** 描述 */
        private String description;
        /** 消息 */
        private List<PromptMessage> messages;

        /**
         * 获取描述
         * @return 描述
         */
        public String getDescription() {
            return description;
        }

        /**
         * 设置描述
         * @param description 描述
         */
        public void setDescription(String description) {
            this.description = description;
        }

        /**
         * 获取消息
         * @return 消息
         */
        public List<PromptMessage> getMessages() {
            return messages;
        }

        /**
         * 设置消息
         * @param messages 消息
         */
        public void setMessages(List<PromptMessage> messages) {
            this.messages = messages;
        }
    }
}
